昨天我們把 GitHub Actions 當成「世界線檢查機構」,只要有人 push 程式碼,就會自動檢查「世界線是否崩壞」
但是我在世界線檢查機構裡,直接按下啟動鍵,結果轟!失敗了
為什麼?因為我忘了帶上必要的零件(pytest)
昨天發布的正式文章是正常的,請放心食用
沒有零件的時空跳躍機,就跟沒有 Dr.Pepper 的岡部倫太郎一樣,根本轉不動
所以今天我們要來談談套件(packages)管理 + 快取(cache)加速,確保世界線檢查不會卡住
在 Python 裡,套件就像是時空跳躍用的零件
沒安裝 → 機器沒法運作
版本亂掉 → 結果不一致,可能在你電腦能跑,在CI就掛掉
因此我們要用 requirements.txt 記錄套件清單
在CI自動安裝,確保每次檢查都能重現一樣的環境
讓我們來看看昨天怎麼把世界線檢查機構搭建起來的吧
跟**.github/workflows/ci.yml**對照看
假設我要在本地安裝pytest這個套件
pip install pytest #如果有多python版本也許是pip3
下載完可以檢查是否有正確安裝
pip list
如果有正確安裝到應該會出現在列表中
Package Version
----------------- -------
pip 25.2
pytest 8.4.1
版本不同是正常的,因為pip預設會安裝最新版本
很多人卡在環境建置就是因為只要某套件有更新
就可能發生跟其他套件產生衝突的情況
如同跳躍裝置不是隨便拼拼湊湊的,要有完整清單,才能保證每次重現同樣的世界線
這清單在Python裡就是 requirements.txt
如果你在本地能跑成功,想要把套件一鍵同步到requirements.txt裡再傳到其他機器執行
只要輸入這個指令即可
pip freeze > .\requirements.txt
如果要指定版本就編輯requirements.txt
pytest==8.4.1
在 .github/workflows/ci.yml 裡,把裝零件的步驟加進去:
- name: 安裝套件
run: pip install -r requirements.txt
這樣每次跳躍前,系統都會自動檢查清單,先把零件裝好再出發
問題來了:每次安裝套件都要重新下載,特別是專案一多,CI 跑超慢
每次跳躍前都要重新下載零件
而解法就是快取,就像在研究所地下室建了一個「備用零件倉庫」,下次要跳躍就直接拿,不用再等工廠生產
在 workflow 加一段 cache:
- name: Cache pip
uses: actions/cache@v3
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
意思:
第一次 CI 還是會慢一點,因為要下載
但之後再 push,你會看到 log 裡有:
這表示世界線跳躍直接調用了快取機制,速度起飛
今天,我們讓世界線檢查機構變得更穩
零件清單 (requirements.txt) → 確保環境一致,不再少零件
備用零件倉庫 (cache) → 減少等待,加快世界線檢查
到這裡,我們已經擁有一個「最小世界線守護者」